<?php
class ExpedientesController extends AppController {
	var $name = 'Expedientes';
    var $appModule = 'Expediente';
	var $helpers = array('Html', 'Form', 'Number', 'Codigo','GetList', 'TextDate');

	function index() {
		$q = $this->getBusqueda($this->data['Expediente']['busqueda']);
		$this->set('q', $q);
		
		$this->loadModel('Registro');
		$conditions['Registro.ejercicio_id'] = $this->ejercicioId();
        $conditions['Registro.empresa_id'] = $this->empresaId();
        $conditions['Registro.activo'] = true;
		if (!empty($q)){
			$conditions['OR'] = array(
				'Registro.numero_expediente SIMILAR TO'=>$q,
				'Materia.descripcion SIMILAR TO'=>'%'.$q.'%',
				'Lugare.descripcion SIMILAR TO'=>'%'.$q.'%',
				'Estado.descripcion SIMILAR TO'=>'%'.$q.'%',
				'Registro.denunciantes SIMILAR TO'=>'%'.$q.'%',
				'Registro.denunciados SIMILAR TO'=>'%'.$q.'%',
				'Registro.afectados SIMILAR TO'=>'%'.$q.'%',
				'Registro.denunciantes_dni SIMILAR TO'=>'%'.$q.'%',
				'Registro.denunciados_dni SIMILAR TO'=>'%'.$q.'%',
				'Registro.afectados_dni SIMILAR TO'=>'%'.$q.'%'
			);
		}
		$this->paginate['Registro'] = array(
			'conditions'=>$conditions,
			'contain'=>array(
				'Estado.descripcion',
				'Role.descripcion',
				'Lugare.descripcion',
				'Materia.descripcion'
			),
			'order'=>array('Registro.numero_expediente'=>'desc')
		);
		$expedientes = $this->paginate('Registro');
		$this->set(compact('expedientes'));
		$this->set('limite', $this->limite);
		$this->set('estados', $this->Expediente->Estado->find('list', array('Estado.activo'=>true)));
		
	}

	function view($id = null) {
		if(empty($id)){
			$this->Session->setFlash(__('Identificado no valido', true));
			$this->redirect(array('action'=>'index'));
		} else {
			$expediente = $this->Expediente->find('first', array(
											'conditions'=>array('Expediente.id'=>$id),
											'contain'=>array(
												'Materia','Lugare','Role','Estado','Defensore',	
												'Afectado'=>array('Tercero'),
												'Denunciante'=>array('Tercero','Role', 'Distrito'),
												'Denunciado'=>array('Tercero','Role', 'Distrito'),												
												'Seguimiento'=>array(
													'conditions'=>array('activo'=>true),
													'order'=>array( 'codigo'),
													'Accione.descripcion',
													'Dependencia.descripcion',
													'Encargado'=>array(
															'Tercero'=>array(
															'numero_documento',
															'nombres', 
															'apellido_paterno', 
															'apellido_materno'))),
											),'order'=>'Expediente.numero_registro'));
			$this->set(compact('expediente'));
		} 
		return true;
	}
	
	function add_edit_tercero(&$tercero){
		$this->loadModel('Tercero');
		if(empty($tercero['id'])){
			$this->Tercero->create();
			unset($tercero['id']);
		}		
		$tercero['empresa_id'] = $this->empresaId();
		$tercero['tipo_documento_id'] = 1;
		
		$val = $this->Tercero->save($tercero);
		if(!$val){			
			return false;
		}
		$tercero['id'] = empty($tercero['id'])?$this->Tercero->id: $tercero['id'];
		return $tercero['id'] ;
	}
	
	function add() {
		if(!empty($this->data)){			
			$this->data['Expediente']['ejercicio_id']			=		$this->ejercicioId();
			$this->data['Expediente']['empresa_id']				=		$this->empresaId();
			$this->data['Expediente']['periodo_id']				=		$this->periodoId();
			$this->data['Expediente']['usuario_creacion_id']	=		$this->usuarioId();
			$this->data['Expediente']['fecha_creacion']			=		'now()';
			$this->data['Expediente']['activo']					=		true;
			
			if(empty($this->data['Expediente']['expediente_id'])){
				$this->data['Expediente']['numero_expediente'] 		= 	$this->Expediente->generateControl();
				$this->data['Expediente']['numero_expediente_letra']= 	$this->data['Expediente']['numero_expediente'].'-A';
			} else {
				$sql = 'SELECT e.numero_expediente as "Expediente__numero_expediente", count(e.id) as "Expediente__cantidad"
						FROM expedientes.expedientes e
						WHERE e.numero_expediente = \'%numero_expediente\'
						AND e.activo = true
						group by e.numero_expediente';
				$_expediente = $this->Expediente->query(str_replace(array('%numero_expediente'), array($this->data['Expediente']['numero_expediente']), $sql));				
				$_expediente = $_expediente[0];
				$this->data['Expediente']['numero_expediente_letra'] = $this->data['Expediente']['numero_expediente'].'-'.chr(65+ $_expediente['Expediente']['cantidad']);
			}			
			$this->Expediente->create();
			$this->Expediente->begin();
			$value = $this->Expediente->save($this->data['Expediente']);
			if($value){
				$expediente_id = $this->Expediente->id;
				foreach($this->data['Denunciante'] as $denunciante){
					if(!empty($denunciante['Tercero']['nombres'] )){
						$this->Expediente->Denunciante->create();
						$denunciante['expediente_id'] = $expediente_id;
						$denunciante['Tercero']['id']  = $denunciante['tercero_id'] ;
						$denunciante['Tercero']['direccion'] = $denunciante['domicilio'];
						$denunciante['Tercero']['telefono1'] = $denunciante['telefono'];
						$denunciante['Tercero']['ocupacion'] = $denunciante['ocupacion'];
						if($tercero_id = $this->add_edit_tercero($denunciante['Tercero'])){							
							$denunciante['tercero_id'] =  $tercero_id;
						} else {
							$this->Expediente->rollback();
							return false;
						}
						$denunciante['activo'] =  true;
						$result = $this->Expediente->Denunciante->save($denunciante);
						if(!$result){
							$this->Expediente->rollback();
							return false;
						}
					}					
				}
				
				foreach($this->data['Afectado'] as $afectado){				
					if(!empty($afectado['Tercero']['nombres'] )){
						$this->Expediente->Afectado->create();
						$afectado['expediente_id'] = $expediente_id;
						$afectado['Tercero']['id']  = empty($afectado['tercero_id'])?null:$afectado['tercero_id'];
						if($tercero_id = $this->add_edit_tercero($afectado['Tercero'])){
							$afectado['tercero_id'] =  $tercero_id;
						} else {
							$this->Expediente->rollback();
							return false;
						}
						$afectado['activo'] =  true;
						$result = $this->Expediente->Afectado->save($afectado);
						if(!$result){
							$this->Expediente->rollback();
							return false;
						}
					}
				}
				
				foreach($this->data['Denunciado'] as $denunciado){
					if(!empty($denunciado['Tercero']['nombres'] )){
						$this->Expediente->Denunciado->create();
						$denunciado['expediente_id'] = $expediente_id;
						$denunciado['Tercero']['id']  = empty($denunciado['tercero_id'] )?null:$denunciado['tercero_id'];
						$denunciado['Tercero']['direccion'] = $denunciado['domicilio'];
						$denunciado['Tercero']['telefono1'] = $denunciado['telefono'];
						$denunciado['Tercero']['ocupacion'] = $denunciado['ocupacion'];
						$this->add_edit_tercero($denunciado['Tercero']);
						if($tercero_id = $this->add_edit_tercero($denunciado['Tercero'])){
							$denunciado['tercero_id'] =  $tercero_id;
						} else {
							$this->Expediente->rollback();
							return false;
						}
						$denunciado['activo'] =  true;
						$result = $this->Expediente->Denunciado->save($denunciado);
						if(!$result){
							$this->Expediente->rollback();
							return false;
						}
					}
				}
				$this->Expediente->commit();
				$this->Session->setFlash(__('El expediente fue guardado', true));
				$this->redirect(array('action'=>'index'));
				return false;
			} else {
				$this->Expediente->rollback();
				return false;
			}
		} else {
			$this->data['Expediente']['numero_registro'] = '23009';
			$this->data['Expediente']['numero_expediente'] = $this->Expediente->generateControl();
			
			$this->data['Denunciante'] = array();
			$this->data['Denunciado'] = array();
			$this->data['Afectado'] = array();
		}		
	}

	function edit($id = null) {
		if(empty($id)){
			$this->Session->setFlash(__('Identificado no valido', true));
			$this->redirect(array('action'=>'index'));
		} else if(empty($this->data)){
			$this->data = $this->Expediente->find('first', array(
											'conditions'=>array('Expediente.id'=>$id),
											'contain'=>array(
												'Materia','Lugare','Role',
												'Denunciante'=>array(
													'conditions'=>array('activo'=>true),
													'Role','Distrito',
													'Tercero'=>array(
														'numero_documento',
														'nombres', 
														'apellido_paterno', 
														'apellido_materno',
														'sexo')),
												'Denunciado'=>array(
													'conditions'=>array('activo'=>true),
													'Role','Distrito',
													'Tercero'=>array('numero_documento','nombres', 'apellido_paterno', 'apellido_materno','sexo')),
												'Afectado'=>array(
													'conditions'=>array('activo'=>true),
													'Tercero'=>array('numero_documento','nombres', 'apellido_paterno', 'apellido_materno','sexo'))
											),'order'=>'Expediente.numero_registro'));			
			$this->set(compact('expediente'));
		} else {			
			$this->Expediente->begin();			
			$this->data['Expediente']['usuario_modificacion_id']	=		$this->usuarioId();
			$this->data['Expediente']['fecha_modificacion']			=		'now()';
			$expediente_id = $this->data['Expediente']['id'];
			$value = $this->Expediente->save($this->data['Expediente']);
			if($value){				
				foreach($this->data['Denunciante'] as $denunciante){
					if(!empty($denunciante['Tercero']['nombres'])){
						if(empty($denunciante['id'])){
							$this->Expediente->Denunciante->create();	
						}						
						$denunciante['expediente_id'] = $expediente_id;
						$denunciante['activo'] = true;
						$denunciante['Tercero']['id']  = empty($denunciante['tercero_id'])?null:$denunciante['tercero_id'];
						$denunciante['Tercero']['distrito_id'] = $denunciante['distrito_id'];
						$denunciante['Tercero']['direccion'] = $denunciante['domicilio'];
						$denunciante['Tercero']['telefono1'] = $denunciante['telefono'];
						$denunciante['Tercero']['ocupacion'] = $denunciante['ocupacion'];
						if($tercero_id = $this->add_edit_tercero($denunciante['Tercero'])){							
							$denunciante['tercero_id'] =  $tercero_id;
						} else {
							$this->Expediente->rollback();
							$this->Session->setFlash(__('Advertencia: Verifique los datos de los denunciantes', true));
							return false;
						}						
						$result = $this->Expediente->Denunciante->save($denunciante);										
						if(!$result){
							$this->Expediente->rollback();
							$this->Session->setFlash(__('Advertencia: Verifique los datos de los denunciantes', true));
							return false;
						}
					} else if(!empty($denunciante['id'])){
						$_denunciante = $this->Expediente->Denunciante->find('first', array('Denunciante.id'=>$denunciante['id']));
						$_denunciante['Denunciante']['activo'] = false;												
						$this->Expediente->Denunciante->save($_denunciante);
					}
				}
				
				foreach($this->data['Afectado'] as $afectado){				
					if(!empty($afectado['Tercero']['nombres'] )){
						if(empty($afectado['id'])){
							$this->Expediente->Afectado->create();	
						}
						$afectado['expediente_id'] = $expediente_id;
						$afectado['activo'] = true;
						$afectado['Tercero']['id']  = empty($afectado['tercero_id'])?null:$afectado['tercero_id'];
						if($tercero_id = $this->add_edit_tercero($afectado['Tercero'])){
							$afectado['tercero_id'] =  $tercero_id;
						} else {
							$this->Expediente->rollback();
							$this->Session->setFlash(__('Advertencia: verifique los datos de los afectados', true));
							return false;
						}
						$result = $this->Expediente->Afectado->save($afectado);
						if(!$result){
							$this->Expediente->rollback();
							$this->Session->setFlash(__('Advertencia: verifique los datos de los afectados', true));
							return false;
						}
					} else if(!empty($afectado['id'])){						
						$_afectado = $this->Expediente->Afectado->find('first', array('Afectado.id'=>$afectado['id']));
						$_afectado['Afectado']['activo'] = false;												
						$this->Expediente->Afectado->save($_afectado);
					}
				}
				
				foreach($this->data['Denunciado'] as $denunciado){
					if(!empty($denunciado['Tercero']['nombres'] )){
						if(empty($denunciado['id'])){
							$this->Expediente->Denunciado->create();	
						}
						$denunciado['expediente_id'] = $expediente_id;
						$denunciado['activo'] = true;
						$denunciado['Tercero']['id']  = empty($denunciado['tercero_id'])?null:$denunciado['tercero_id'];
						$denunciado['Tercero']['distrito_id'] = $denunciado['distrito_id'];
						$denunciado['Tercero']['direccion'] = $denunciado['domicilio'];
						$denunciado['Tercero']['telefono1'] = $denunciado['telefono'];
						$denunciado['Tercero']['ocupacion'] = $denunciado['ocupacion'];
						$this->add_edit_tercero($denunciado['Tercero']);
						if($tercero_id = $this->add_edit_tercero($denunciado['Tercero'])){
							$denunciado['tercero_id'] =  $tercero_id;
						} else {
							$this->Expediente->rollback();
							$this->Session->setFlash(__('Advertencia: verifique los datos de los denunciados', true));
							return false;
						}						
						$result = $this->Expediente->Denunciado->save($denunciado);
						if(!$result){
							$this->Expediente->rollback();
							$this->Session->setFlash(__('Advertencia: verifique los datos de los denunciados', true));
							return false;
						} else if(!empty($denunciado['id'])){
							$_denunciado = $this->Expediente->Afectado->find('first', array('Denunciante.id'=>$denunciado['id']));
							$_denunciado['Denunciante']['activo'] = false;												
							$this->Expediente->Denunciado->save($_denunciado);
						}
					}
				}
				$this->Expediente->commit();
				$this->Session->setFlash(__('El expediente fue modificado', true));
				$this->redirect(array('action'=>'index'));
				return true;
			} else {
				$this->Session->setFlash(__('Advertencia: El expediente no fue modificado', true));
				$this->Expediente->rollback();
				return false;
			}			
		}
		return true;
	}
	
	function report($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'select 
						m.id as "Materia__id",
						m.descripcion as "Materia__descripcion",
						tm.id as "TipoMateria__id",
						tm.descripcion as "TipoMateria__descripcion",
						count(e.id) as "Materia__cantidad"
					from expedientes.materias m
					left join expedientes.tipo_materias tm on tm.id = m.tipo_materia_id
					left join expedientes.expedientes e on m.id = e.materia_id and e.fecha BETWEEN \'%fecha1\' and \'%fecha2\'  and e.activo					
					where m.activo = true
					group by 
						tm.id,
						m.id,
						m.descripcion,
						tm.descripcion
					order by 
						tm.id asc,
						m.id asc';
		$materias = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));	
		//var_dump($materias);die;
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		$this->set(compact('materias', 'mes1', 'mes2'));
	}
	
	function afectados_edad($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'SELECT 
						sum(case when t.sexo and toYear(a.edad,a.periodo) BETWEEN 0 and 5 then 1 else 0 end) as "Expediente__hombre05",
						sum(case when not(t.sexo) and toYear(a.edad,a.periodo) BETWEEN 0 and 5 then 1 else 0 end)  as "Expediente__mujer05",
						sum(case when t.sexo and toYear(a.edad,a.periodo) BETWEEN 6 and 11 then 1 else 0 end)  as "Expediente__hombre611",  
						sum(case when not(t.sexo) and toYear(a.edad,a.periodo) BETWEEN 6 and 11 then 1 else 0 end)  as "Expediente__mujer611", 
						sum(case when t.sexo and toYear(a.edad,a.periodo) BETWEEN 12 and 17 then 1 else 0 end)  as "Expediente__hombre1217",
						 sum(case when not(t.sexo) and toYear(a.edad,a.periodo) BETWEEN 6 and 11 then 1 else 0 end)  as "Expediente__mujer1217", 
						sum(case when toYear(a.edad,a.periodo) < 18 and a.gestante then 1 else 0 end)  as "Expediente__menor_gestante",
						sum(case when toYear(a.edad,a.periodo) >= 18 and a.gestante then 1 else 0 end)  as "Expediente__mayor_gestante",
						sum(case when t.sexo and toYear(a.edad,a.periodo) >= 18 then 1 else 0 end)  as "Expediente__hombre18",
						sum(case when not(t.sexo) and toYear(a.edad,a.periodo) >= 18 then 1 else 0 end)  as "Expediente__mujer18",
						sum(case when t.sexo and a.discapacitado then 1 else 0 end)  as "Expediente__discapacitados_hombres",
						sum(case when not(t.sexo) and a.discapacitado then 1 else 0 end)  as "Expediente__discapacitados_mujeres"
					FROM expedientes.expedientes e 
					left join expedientes.afectados a on a.expediente_id = e.id
					left join maestros.terceros t on t.id = a.tercero_id
					where e.activo = TRUE and a.activo and e.fecha BETWEEN \'%fecha1\' and \'%fecha2\'';
		$edades = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));
		$edades = $edades[0];
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		$this->set(compact('edades', 'mes1', 'mes2'));
	}
	
	function lista_por_estado($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'SELECT 
							es.id as "Estado__id", 
							es.descripcion as "Estado__descripcion", 
							count(*) as "Estado__cantidad" 
						FROM expedientes.estados es
						left join expedientes.expedientes e on es.id = e.estado_id
						where e.activo = TRUE 
						 and e.fecha BETWEEN \'%fecha1\' and \'%fecha2\'  
						group by es.id, es.descripcion ';
		$estados = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		$this->set(compact('estados', 'mes1', 'mes2'));
	}
	
	function materia_estado($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'SELECT 
						t.id as "Estado__id",
						t.descripcion as "Estado__descripcion",
						m.id  as "Materia__id",
						m.descripcion as "Materia__descripcion",
						tm.id  as "TipoMateria__id",
						tm.descripcion  as "TipoMateria__descripcion",
						count(e.id) as "Materia__cantidad"
					FROM expedientes.expedientes e 
					left join expedientes.materias m on m.id = e.materia_id
					left join expedientes.tipo_materias tm on tm.id = m.tipo_materia_id
					left join expedientes.estados t on t.id = e.estado_id
					where e.activo = TRUE  and e.fecha BETWEEN \'%fecha1\' and \'%fecha2\'
					group by 
						t.id,
						t.descripcion,
						m.id,
						m.descripcion,
						tm.id,
						tm.descripcion
					order by 						
						t.id asc,
						tm.id asc,
						m.descripcion asc';
		$materiaEstado = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		$this->set(compact('materiaEstado', 'mes1', 'mes2'));
	}
	
	function listado_lugar($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'SELECT 
				l.id as "Lugare__id",
			    l.descripcion as "Lugare__descripcion",
			    count(e.id) as  "Lugare__cantidad"
			FROM expedientes.lugares l
			inner join  expedientes.expedientes e  on l.id = e.lugar_id
			where e.activo = TRUE  and e.fecha BETWEEN \'%fecha1\' and \'%fecha2\'
			group by 
				l.id,
			    l.descripcion';
		$lugares = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		
		$this->set(compact('lugares', 'mes1', 'mes2'));
	}
	
	function listado_dependenias($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'select
					d.id as "Dependencia__id",
				    d.descripcion as "Dependencia__descripcion",
				    count(t1.id) as  "Dependencia__cantidad"
				from expedientes.dependencias d 
				inner join (
				  select 
				  	DISTINCT ON (s.expediente_id) expediente_id,
				    s.fecha ,
				    s.id,
				    s.dependencia_id,
				    s.accion_id
				  from expedientes.seguimientos s 
				  where s.activo = true 
				  and s.fecha BETWEEN \'%fecha1\' and \'%fecha2\'
				  order by s.expediente_id desc, s.fecha desc
				  ) t1 on d.id = t1.dependencia_id and t1.accion_id = 2
				where  d.activo = true  and d.id <> 0
				group by 
					d.id,
				    d.descripcion
				order by 
					d.id,
				    d.descripcion';
		$dependencias = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		
		$this->set(compact('dependencias', 'mes1', 'mes2'));
	}
	
	function listado_derivado_materia($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'select  
						m.descripcion as "Materia__descripcion",
						count(t1.id) as  "Materia__cantidad"
					from (
					  select 
						DISTINCT ON (s.expediente_id) expediente_id,
						s.fecha ,
						s.id,
						s.dependencia_id,
						s.accion_id,
						a.descripcion
					  from expedientes.seguimientos s 
					  left join expedientes.acciones a on a.id = s.accion_id
					  where s.activo = true 
					  and s.fecha BETWEEN \'%fecha1\' and \'%fecha2\'
					  order by s.expediente_id desc, s.fecha desc
					  ) t1 
					left join expedientes.expedientes e on e.id = t1.expediente_id
					left join expedientes.materias m on m.id = e.materia_id
					where e.activo and t1.accion_id = 5
					group by 
						"Materia__descripcion"
					order by 
						"Materia__descripcion""';
		$dependencias = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		
		$this->set(compact('dependencias', 'mes1', 'mes2'));
	}
	
	function listado_materia_estado($fecha1=null, $fecha2=null, $estado_id = 0){
		$this->reporte_html();
		$sql = 'select
						s.id,
						s.descripcion as "Estado__descripcion",
						m.descripcion as "Materia__descripcion",
						count(m.codigo) as "Estado__cantidad"
					from expedientes.expedientes e
					left join expedientes.estados s on s.id = e.estado_id
					left join expedientes.materias m on m.id = e.materia_id
					where e.activo = true
					and e.estado_id = %estado_id
					and e.fecha BETWEEN \'%fecha1\' AND \'%fecha2\'
					group by 
						s.descripcion,
						m.descripcion"';
		$expedientes = $this->Expediente->query(str_replace(array('%fecha1','%fecha2', '%estado_id'), array($fecha1, $fecha2, $estado_id),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		$Estado = $this->Expediente->Estado->find('first',array('conditions'=>array('id'=>$estado_id ), 'recursive'=>-1));
		$estado =  $Estado['Estado']['descripcion'];
		$this->set(compact('expedientes', 'mes1', 'mes2', 'estado'));
	}
	
	function listado_accion_expediente($fecha1=null, $fecha2=null){
		$this->reporte_html();
		$sql = 'select  
						t1.descripcion as "Accion__descripcion",
						count(t1.id) as  "Dependencia__cantidad"
					from (
					  select 
						DISTINCT ON (s.expediente_id) expediente_id,
						s.fecha ,
						s.id,
						s.dependencia_id,
						s.accion_id,
						a.descripcion
					  from expedientes.seguimientos s 
					  left join expedientes.acciones a on a.id = s.accion_id
					  where s.activo = true 
					  and s.fecha BETWEEN \'%fecha1\' and \'%fecha2\'
					  order by s.expediente_id desc, s.fecha desc
					  ) t1 
					left join expedientes.expedientes e on e.id = t1.expediente_id
					where e.activo
					group by 
						"Accion__descripcion"
					order by 
						"Accion__descripcion"';
		$dependencias = $this->Expediente->query(str_replace(array('%fecha1','%fecha2'), array($fecha1, $fecha2),$sql));	
		$mes1 = $this->periodos[$this->periodoId($fecha1)-0];
		$mes2 = $this->periodos[$this->periodoId($fecha2)-0];
		
		$this->set(compact('dependencias', 'mes1', 'mes2'));
	}
	
	function delete($id, $bahivor = true){
		$expediente = $this->Expediente->find('first', array('conditions'=>array('Expediente.id'=>$id), 'recursive'=>-1));
		$continue = true;
		if($expediente['Expediente']['cerrado']){
			$this->Session->setFlash(__('ADVERTENCIA: Expediente esta cerrado', true));		
			$continue = false;
		} else {		
			$expediente['Expediente']['activo'] = false;
			$expediente['Expediente']['usuario_borrado_id'] = $this->usuarioId();
			$continue = $this->Expediente->save($expediente['Expediente']);
		}
		if(!$continue){
			if($bahivor){
					$this->redirect(array('action'=>'view', $id));
			} else {
				return false;
			}
		} else {
			$this->Session->setFlash(__('El registro fue eliminado', true));	
			if($bahivor){
					$this->redirect(array('action'=>'index'));
			} else {
				return true;
			}
		}
		
	}

	function process(){	
		//var_dump($this->params);die;
		$op = isset($this->params['form']['delete'])?'eliminar':'estado';
        $flag = true;
        $i = 0;
        foreach($this->data as $item){
            if ($item['id']!='0'){
                if(isset($this->params['form']['delete'])){ // eliminar
                    $flag = $this->delete($item['Registro']['id'], false);
                } else if(isset($this->params['form']['RegistroEstadoId'])){
					$flag = $this->estado($item['Registro']['id'], $this->params['form']['RegistroEstadoId']);
				}
                if (!$flag){
                    $data = $this->Expediente->read(null, $item['Registro']['id']);
                    $this->Session->setFlash(__("Se ha producido un error al $op el Almacen #".$data['Expediente']['numero_expediente'], true));
                    break;
                }
            }
            $i++;
        }
        if ($flag && $i > 0){
            $this->Session->setFlash(__("El proceso de  expedientes se ha realizado con exito.", true));
        }
        $this->redirect(array('action'=>'index'));
	}
	
	function estado($id, $estado, $bahivor = true){
		$expediente = $this->Expediente->find('first', array('conditions'=>array('Expediente.id'=>$id), 'recursive'=>-1));
		$continue = true;
		if($expediente['Expediente']['cerrado']){
			$this->Session->setFlash(__('ADVERTENCIA: Expediente esta cerrado', true));		
			$continue = false;
		} else {		
			$expediente['Expediente']['estado_id'] = $estado;
			$continue = $this->Expediente->save($expediente['Expediente']);
		}
		if(!$continue){
			if($bahivor){
					$this->redirect(array('action'=>'index', $id));
			} else {
				return false;
			}
		} else {
			$this->Session->setFlash(__('El registro fue actualizado', true));	
			if($bahivor){
					$this->redirect(array('action'=>'index'));
			} else {
				return true;
			}
		}
		
	}
	
	function buscar($q = null){
        $result = '';
        //estableciendo par�metros de b�squeda
        if(!empty($this->params['url']['q'])){
            $q = $this->params['url']['q'];
        } elseif(!empty($this->params['form']['q'])) {
            $q = $this->params['form']['q'];
        } elseif(!empty($this->data['Materia']['q'])){
            $q = $this->data['Materia']['q'];
        }

        if(empty($q)){
            $result = array('no ha establecido los parámetros correctamente');
        } else {
            $q = strtoupper($q);
			$this->Expediente->Behaviors->attach('Containable');           
            
	        $this->loadModel('Registro');			
	        $conditions['Registro.activo'] = true;
			if (!empty($q)){
				$conditions['OR'] = array(
					'Registro.numero_expediente SIMILAR TO'=>$q,
					'Materia.descripcion SIMILAR TO'=>'%'.$q.'%',
					'Lugare.descripcion SIMILAR TO'=>'%'.$q.'%',
					'Estado.descripcion SIMILAR TO'=>'%'.$q.'%',
					'Registro.denunciantes SIMILAR TO'=>'%'.$q.'%',
					'Registro.denunciados SIMILAR TO'=>'%'.$q.'%',
					'Registro.afectados SIMILAR TO'=>'%'.$q.'%',
					'Registro.denunciantes_dni SIMILAR TO'=>'%'.$q.'%',
					'Registro.denunciados_dni SIMILAR TO'=>'%'.$q.'%',
					'Registro.afectados_dni SIMILAR TO'=>'%'.$q.'%'
				);
			}			
			$resultTemp = $this->Registro->find('all',array('conditions'=>$conditions,'limit'=>100));
			foreach($resultTemp as $row){				
				$result[] = array('Expediente'=>$row['Registro'],'Materia'=>$row['Materia'], 'Lugare'=>$row['Lugare']); 	
			}
        }

        //para peticiones de autocompletado
        $res = array();
        if(!empty($this->params['url']['autocomplete']) || !empty($this->params['form']['autocomplete'])){
            foreach($result as $value){ 
                $res[] = array('value'=>$value['Expediente']['id'], 'display'=>'<span style="color:gray;font-size:.9em">'. $value['Expediente']['numero_expediente'] .'</span><div style="float:right;font-size:.8em" title="'. $value['Materia']['descripcion'] .'">'. $value['Materia']['descripcion'] .'</div>');
            }
            $result = $res;
        }

        if ($this->RequestHandler->isAjax()){
            $this->_ajaxify($result);
        } else {
            return $result;
        }
    }
}
?>